package com.toe.forum.webapi.mapper;

import com.toe.pojo.dto.forum.ArticleUpdateCountDTO;
import com.toe.pojo.dto.forum.ArticleUpdateDTO;
import com.toe.pojo.entity.forum.ForumArticle;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.toe.pojo.vo.forum.ArticleDetailVO;
import com.toe.pojo.vo.forum.ArticleSimpleVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;


/**
 * <p>
 * 文章表 Mapper 接口
 * </p>
 *
 * @author 陶涛
 * @since 2022-07-19
 */
@Repository
public interface ForumArticleMapper extends BaseMapper<ForumArticle> {
    /**
     * 利用mybatis-plus添加文章
     * @param forumCategory
     * int insert(ForumCategory forumCategory);
     * @return
     */

    /***
     * 根据 ID 删除
     * @param id 主键ID
     *  int deleteById(Serializable id);
     * */

    /**
     * 修改文章的文字内容
     * @param articleUpdateDTO
     */
    void updateArticle(@Param("articleUpdateDTO") ArticleUpdateDTO articleUpdateDTO);

    /**
     * 查询全部的文章
     * @return
     */
    List<ArticleDetailVO> selectAllArticle();

    /**
     * 分页查询所有的文章
     * @return
     */
    List<ArticleSimpleVO> selectAllArticlePage(@Param("pageNum") Integer pageNum,@Param("pageSize") Integer pageSize);

    /**
     * 通过分类ID查询该分类的全部的文章
     * @return
     */
    List<ArticleDetailVO> selectAllArticleByCategoryId(long categoryId);

    /**
     * 通过分类ID分页查询该分类的全部的文章
     * @return
     */
    List<ArticleSimpleVO> selectAllArticleByCategoryIdPage(@Param("categoryId") long categoryId,@Param("pageNum") Integer pageNum,@Param("pageSize") Integer pageSize);

    /**
     * 查询某个作者的全部文章
     * @param authorId
     * @return
     */
    List<ArticleDetailVO> selectAllArticleByAuthorId(long authorId);

    /**
     * 分页查询某个作者的全部文章
     * @param authorId
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<ArticleSimpleVO> selectAllArticleByAuthorIdPage(@Param("authorId") long authorId,@Param("pageNum") Integer pageNum,@Param("pageSize") Integer pageSize);

    /**
     * 查询当前用户点赞过的文章
     * @param userId
     * @return
     */
    List<ArticleDetailVO> selectAllArticleByUserLike(long userId);

    /**
     * 分页查询当前用户点赞过的文章
     * @param userId
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<ArticleSimpleVO> selectAllArticleByUserLikePage(@Param("userId") long userId,@Param("pageNum") Integer pageNum,@Param("pageSize") Integer pageSize);

    /**
     * 查询当前用户收藏过的文章
     * @param userId
     * @return
     */
    List<ArticleDetailVO> selectAllArticleByUserEnshrine(long userId);

    /**
     * 分页查询当前用户收藏过的文章
     * @param userId
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<ArticleSimpleVO> selectAllArticleByUserEnshrinePage(@Param("userId") long userId,@Param("pageNum") Integer pageNum,@Param("pageSize") Integer pageSize);

    /**
     * 查询当前用户正在审核的文章
     * @param userId
     * @return
     */
    List<ArticleDetailVO> selectAllArticleInCheck(long userId);

    /**
     * 通过id查询对应的文章
     * @param id
     * @return
     */
    ArticleDetailVO selectArticleById(long id);

    /**
     * 更新文章的各种数字数据
     * @param articleUpdateCountDTO
     */
    void updateCount(@Param("articleUpdateCountDTO") ArticleUpdateCountDTO articleUpdateCountDTO);

    /**
     * 更新文章的状态,即是否被举报
     * @param id
     * @param state
     */
    void updateArticleIsReport(@Param("id") long id,@Param("state") Integer state);

    /**
     * 查询当前用户点赞的文章数量
     * @return
     */
    int selectCurrentLikeCount(long userId);

    /**
     * 查询当前用户收藏的文章数量
     * @return
     */
    int selectCurrentEnshrineCount(long userId);

    /**
     * (管理员)批量删除文章
     * @return
     */
    int deleteArticleByIds(Long... ids);
}
